var R = require('ramda'); //导入ramda 函数式编程模块

// 练习 1
//==============
// 通过部分应用（partial apply）移除所有参数

var words = function (str) {
    return R.split(' ', str);
};

console.log(words("41414 5341 1521 514544112 1312412 514"))

// 练习 1a
//==============
// 使用 `map` 创建一个新的 `words` 函数，使之能够操作字符串数组

var sentences = undefined;

// ramda map 
// https://www.ruanyifeng.com/blog/2017/03/ramda.html
sentences = R.map(words)
let sentencesOut = sentences(["21211", "1212 121 212", "21"])
console.log("sentencesOut")
console.log(sentencesOut)


// 练习 2
//==============
// 通过部分应用（partial apply）移除所有参数

var filterQs = function (xs) {
    return filter(function (x) { return match(/q/i, x); }, xs);
};

var filterQs2 = R.filter(R.match(/q/i));

console.log(filterQs2(['quick', 'camels', 'quarry', 'over', 'quails']));


// 练习 3
//==============
// 使用帮助函数 `_keepHighest` 重构 `max` 使之成为 curry 函数

// 无须改动:
var _keepHighest = function (x, y) { return x >= y ? x : y; };

// 重构这段代码:
var max = function (xs) {
    return reduce(function (acc, x) {
        return _keepHighest(acc, x);
    }, -Infinity, xs);
};
// 从什么开始 一直在做
max = R.reduce(_keepHighest, -Infinity)
console.log("max([3, 2, 4]) ");
console.log(max([3, 2, 4]))


// 彩蛋 1:
// ============
// 包裹数组的 `slice` 函数使之成为 curry 函数
// //[1,2,3].slice(0, 2)
var slice = undefined;

var slice2 = R.curry(function (xs, start, end) {
    return xs.slice(start, end);
});
// curry 函数就跟 c的函数那样？
console.log("slice 1 2");
console.log(slice2(['a', 'b', 'c'], 1, 2))


// 彩蛋 2:
// ============
// 借助 `slice` 定义一个 `take` curry 函数，该函数调用后可以取出字符串的前 n 个字符。
// var take = undefined;


var take = (arr, cnt) => {
    return slice2(arr, 0, cnt)
}

console.log("take 1");
console.log(take(['a', 'b', 'c'], 1))